# Домашнее задание к занятию «Индексы»

## Задание 1

Напишите запрос к учебной базе данных, который вернёт процентное отношение общего размера всех индексов к общему размеру всех таблиц.

```SQL

SELECT  SUM(data_length), SUM(index_length), SUM(index_length)/SUM(data_length)*100 as '%'
from information_schema.tables

```

![скрин](https://github.com/MalovAleksey/DZ/blob/main/MySQL/2024-01-28_19-45-25.png)



## Задание 2

Выполните explain analyze следующего запроса:

```SQL

select distinct concat(c.last_name, ' ', c.first_name), sum(p.amount) over (partition by c.customer_id, f.title)
from payment p, rental r, customer c, inventory i, film f
where date(p.payment_date) = '2005-07-30' and p.payment_date = r.rental_date and r.customer_id = c.customer_id and i.inventory_id = r.inventory_id

```

перечислите узкие места;

оптимизируйте запрос: внесите корректировки по использованию операторов, при необходимости добавьте индексы.

```SQL

explain analyze
SELECT DISTINCT 
       CONCAT(c.last_name, ' ', c.first_name) AS full_name, 
       SUM(p.amount) OVER (PARTITION BY c.customer_id, f.title)
FROM payment p
JOIN rental r ON p.payment_date = r.rental_date
JOIN customer c ON r.customer_id = c.customer_id
JOIN inventory i ON r.inventory_id = i.inventory_id
JOIN film f ON i.film_id = f.film_id
WHERE payment_date >= '2005-07-30' and payment_date < DATE_ADD('2005-07-30', INTERVAL 1 DAY)


```

![скрин](https://github.com/MalovAleksey/DZ/blob/main/MySQL/2024-02-03_18-14-31.png)
